import cv2
import numpy as np #用于创建数组

if __name__ == '__main__':
    # 创建一个空白图像(0是全黑 , 255是全白)
    """
    返回来一个给定形状和类型的用0填充的数组;
    原型： numpy.zeros(shape, dtype=float, order=‘C’)
    shape:形状，使用元组(高,宽,通道数)
    dtype:数据类型，可选参数，默认numpy.float64
    order:可选参数，c代表与c语言类似，行优先；F代表列优先
    """
    blackImage = np.zeros((512,512,3),dtype=np.uint8)
    # whiteImage = np.ones((512,512,3),dtype=np.uint8) * 255  #全白图像,函数于zeros一致,但是因为是全部白色,所以需要*255,如果不*，那么还是黑色
    # 同理,这样也可以创建出一个其它纯色的图像
    # 创建一个红色的图像，例如 redImage = np.ones((512,512,3),dtype=np.uint8) * [0,0,255]
    #cv2.imshow('white',whiteImage)

    # 画一个矩形  参数依次为:图像,左上角坐标,右下角坐标,颜色,线宽
    cv2.rectangle(blackImage,(50,50),(200,200),(0,255,0),5)
    # 画一条线  参数依次为:图像,起点坐标,终点坐标,颜色,线宽
    cv2.line(blackImage,(0,0),(511,511),(255,0,0),5)
    # 画一个圆  参数依次为:图像,圆心坐标,半径,颜色,线宽
    cv2.circle(blackImage,(255,255),100,(0,0,255),5)
    # 画一个椭圆  参数依次为:图像,中心坐标,轴长度,旋转角度,起始角度,结束角度,颜色,线宽
    #这个图像会让椭圆向上倾斜30°，是因为旋转角度为30，如果结束角度不是360，而是180，那么就只会画一半
    cv2.ellipse(blackImage,(255,255), (100,50) ,0, 0 ,360,(255,255,0),5)

    # 画一个多边形  参数依次为:图像,顶点坐标,是否闭合,颜色,线宽
    #注意:顶点坐标需要使用np.array()转换成数组
    pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
    pts = pts.reshape((-1,1,2)) #将数组转换成二维数组
    cv2.polylines(blackImage,[pts],True,(0,255,255),5)

    # 在图像上写文字  参数依次为:图像,文字内容,文字位置,字体,字体大小,颜色,线宽
    cv2.putText(blackImage,'Hello World',(50,50),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,255),2)

    #先画好,再显示
    cv2.imshow('black',blackImage)
    cv2.waitKey(0)
    cv2.destroyAllWindows()